package com.erp.base.base;

import java.io.Serializable;

import javax.xml.bind.annotation.XmlTransient;

import org.apache.commons.lang3.StringUtils;

import com.fasterxml.jackson.annotation.JsonIgnore;
   
public class BaseEntity<T,K> implements Serializable{
	
	protected K id;
	/**
	 * 当前实体分页对象
	 */
	protected Page<T> page;
	
	/**
	 * 是否是新记录（默认：false），调用setIsNewRecord()设置新记录，使用自定义ID。
	 * 设置为true后强制执行插入语句，ID不会自动生成，需从手动传入。
	 */
	protected boolean isNewRecord = false;
	
	
	public K getId() {
		return id;
	}


	public void setId(K id) {
		this.id = id;
	}

	@JsonIgnore
	@XmlTransient
	public Page<T> getPage() {
		return page;
	}


	public void setPage(Page<T> page) {
		this.page = page;
	}
 
	/**
	 * 是否是新记录（默认：false），调用setIsNewRecord()设置新记录，使用自定义ID。
	 * 设置为true后强制执行插入语句，ID不会自动生成，需从手动传入。
     * @return
     */
	public boolean getIsNewRecord() {
        return isNewRecord || this.id==null||(String.class.isInstance(id)&&StringUtils.isEmpty((String)id));
    }


	public void setNewRecord(boolean isNewRecord) {
		this.isNewRecord = isNewRecord;
	}


	@Override
    public boolean equals(Object obj) {
        if (null == obj) {
            return false;
        }
        if (this == obj) {
            return true;
        }
        if (!getClass().equals(obj.getClass())) {
            return false;
        }
        BaseEntity that = (BaseEntity) obj;
        return null == this.id ? false : this.id.equals(that.id);
    } 
}
